package sf.tools;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 泛型方法类
 */
public class GenericsUtils {
    public static Class<?>[] getGenericTypeClasses(Field field) {
        if (field == null) {
            return null;
        }
        // 示范第二种方法：
        Type mapMainType = field.getGenericType();
        // 为了确保安全转换，使用instanceof
        if (mapMainType != null) {
            return getGenericTypeClasses(mapMainType);
        }
        return null;
    }

    public static Class<?>[] getGenericTypeClasses(Type f) {
        if (f == null) {
            return null;
        }
        Class<?>[] classes = null;
        // 示范第二种方法：
        // 为了确保安全转换，使用instanceof
        if (f instanceof ParameterizedType) {
            // 执行强制类型转换
            ParameterizedType parameterizedType = (ParameterizedType) f;
            // 获取基本类型信息，即Map
            Type basicType = parameterizedType.getRawType();
            // 获取泛型类型的泛型参数
            Type[] types = parameterizedType.getActualTypeArguments();
            classes = new Class[types.length];
            for (int i = 0; i < types.length; i++) {
                classes[i] = (Class<?>) types[i];
            }
        }
        return classes;
    }
}
